package com.ruoyi.system.dto;

import lombok.Data;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.Size;

/**
 * 施工阶段查询DTO
 * 对应需求：施工阶段配置-阶段列表（多条件筛选、分页展示）
 */
@Data
public class StageQueryDTO {

    /**
     * 阶段名称（模糊搜索）
     * 需求约束：
     * - 支持输入阶段名称关键词（如“水电”），匹配所有包含该关键词的阶段
     * - 最大长度50字符（与阶段名称字段长度一致，避免无效输入）
     */
    @Size(max = 50, message = "阶段名称搜索关键词最大长度为50字符")
    private String stageName;

    /**
     * 阶段类型（精确筛选）
     * 需求约束：
     * - 仅支持1（固定阶段）、2（自定义阶段）两个值
     * - 前端通过下拉框选择（“全部”“固定阶段”“自定义阶段”），不传则查询全部
     */
    @Range(min = 1, max = 2, message = "阶段类型仅支持1（固定阶段）、2（自定义阶段）")
    private Integer stageType;

    /**
     * 阶段状态（精确筛选）
     * 需求约束：
     * - 仅支持1（启用）、2（停用）两个值
     * - 前端通过下拉框选择（“全部”“启用”“停用”），不传则查询全部
     */
    @Range(min = 1, max = 2, message = "阶段状态仅支持1（启用）、2（停用）")
    private Integer stageStatus;

    /**
     * 设计师ID（数据隔离字段，后端自动填充，前端无需传递）
     * 需求约束：
     * - 用于筛选自定义阶段：仅展示当前设计师创建的自定义阶段
     * - 固定阶段不受该字段影响（全局可见）
     * - 从登录上下文获取（如Spring Security的Authentication），避免前端篡改
     */
    private String designerId;

    /**
     * 页码（默认1）
     * 需求约束：
     * - 分页查询基础参数，默认展示第一页
     * - 前端分页组件传递，支持页码跳转
     */
    private Integer pageNum = 1;

    /**
     * 每页条数（默认10，可选20/50）
     * 需求约束：
     * - 支持切换每页展示数量，适配不同查看需求（如“列表模式”10条/页，“导出模式”50条/页）
     */
    private Integer pageSize = 10;

    /**
     * 排序字段（默认sortNum，支持stageName/createTime）
     * 需求约束：
     * - 支持按“排序号”“阶段名称”“创建时间”排序
     * - 前端通过点击列表表头触发排序（如点击“排序号”切换升序/降序）
     */
    private String sortField = "sortNum";

    /**
     * 排序方向（默认asc，支持desc）
     * 需求约束：
     * - 配合sortField使用，asc（升序）、desc（降序）
     * - 前端通过排序图标切换（如“↑”表示升序，“↓”表示降序）
     */
    private String sortDir = "asc";
}